import {
	decryptBySM4,
	decryptByAES
} from './crypto'
/**
 * token解密登录返回信息
 * @param {*} token 
 * @param {*} paramStr 
 */
export const getTokenDecode = (token, paramStr) => {
	let key = token.substring(1, 17)
	if (paramStr.startsWith('SM4:')) {
		return JSON.parse(
			decryptBySM4(paramStr.replace('SM4:', ''), key)
		)
	} else if (paramStr.startsWith('AES:')) {
		return JSON.parse(
			decryptByAES(paramStr.replace('AES:', ''), key)
		)
	} else {
		return JSON.parse(paramStr)
	}
}

/**
 * 判断是否有网络
 */
export const hasNetwork = () => {
	return new Promise((resolve) => {
		uni.getNetworkType({
			success: (res) => {
				console.log('===网络。。。。', res)
				resolve(res.networkType !== 'none')
			},
			fail() {
				resolve(false)
			}
		});
	})
}

// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function(fmt) { //author: meizz
	
}

/**
 * 格式化时间
 * @param {Object} date
 * @param {Object} fmt
 */
export const formatDate = (date, fmt) => {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  };
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      let str = o[k] + '';
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
    }
  }
  return fmt;
}
function padLeftZero(str) {
  return ('00' + str).substr(str.length);
}
/**
 * 获取定位信息
 */
export const getLocation = () => {
	return new Promise(async (resolve, reject) => {
		uni.showLoading({
			title: '正在获取定位信息'
		});
		let cacheLocation = uni.getStorageSync('config-cache-location')
		let now = new Date().getTime();
		if (cacheLocation) {
			if (now - 1000 * 60 < cacheLocation.time) {
				// 有效时间
				uni.hideLoading()
				resolve(cacheLocation)
				return
			}
		}
		// 判断是否有网络
		let hasnetwork = await hasNetwork()
		console.log('hasnetwork', hasnetwork)
		if (!hasnetwork) {
			if (cacheLocation) {
				uni.hideLoading()
				resolve(cacheLocation)
				return
			}
		}
		uni.getLocation({
			type: 'wgs84',
			geocode: true,
			success: function(los) {
				console.log('当前位置的经度：' + los.longitude);
				console.log('当前位置的纬度：' + los.latitude);
				console.log('定位信息：', los)
				uni.request({
					url: 'https://restapi.amap.com/v3/geocode/regeo',
					method: 'GET',
					data: {
						output: 'json',
						location: `${los.longitude},${los.latitude}`,
						key: '9927e8d6df9a37118da4eff71ae29b59',
						radius: '1000',
						extensions: 'base'
					},
					sslVerify: false
				}).then(data => {
					console.log('geocode', data)
					uni.hideLoading()
					let [err, res] = data;
					let address = ''
					if (!res || res.statusCode !== 200) {
						address = err.errMsg
					} else {
						address = res.data.regeocode.formatted_address
					}

					// 保存最近一次获取定位信息
					uni.setStorageSync('config-cache-location', {
							time: new Date().getTime(),
							longitude: los.longitude,
							latitude: los.latitude,
							address: address
						})

					resolve({
						longitude: los.longitude,
						latitude: los.latitude,
						address: address
					})

				}).catch(error => {
					uni.hideLoading()
					console.log(error)
					resolve({
						longitude: los.longitude,
						latitude: los.latitude,
						address: ''
					})
				})
			},
			fail(err) {
				console.error(err)
				// 定位权限未开启，引导设置
				uni.hideLoading()
				// #ifdef APP-PLUS
				uni.showModal({
					title: '温馨提示',
					content: '您已拒绝定位,请开启',
					confirmText: '去设置',
					success(res) {
						if (res.confirm) {
							//打开授权设置
							openSetting()
						}
					}
				})
				reject(err)
				// #endif
				// #ifdef MP-WEIXIN
				uni.getSetting({
					async success(res) {
						if (!res.authSetting['scope.userLocation']) {
							//3.1 每次进入程序判断当前是否获得授权，如果没有就去获得授权，如果获得授权，就直接获取当前地理位置
							uni.authorize({
								scope: 'scope.userLocation',
								async success() { //1.1 允许授权
									resolve(await getLocation())
								},
								fail() { //1.2 拒绝授权
									uni.showModal({
										title: '温馨提示',
										content: '您已拒绝定位,请开启',
										confirmText: '去设置',
										success(res) {
											if (res.confirm) {
												//打开授权设置
												wx.openSetting({
													async success(
														dataAu
														) {
														console
															.log(
																dataAu
																)
														if (dataAu
															.authSetting[
																"scope.userLocation"
															] ==
															true
															) {
															wx.showToast({
																title: '授权成功',
																icon: 'success',
																duration: 1000
															})
															//再次授权，调用getLocationt的API
															resolve
																(
																await getLocation())
														} else {
															uni.showToast({
																title: "你拒绝了授权，无法获得周边信息",
																icon: "none"
															});
														}
													}
												})
											} else {
												uni.showToast({
													title: "你拒绝了授权，无法获得周边信息",
													icon: "none"
												});
											}
										}
									})
								}
							})
						} else {
							uni.showModal({
								title: '温馨提示',
								showCancel: false,
								content: '手机已关闭位置信息，请到手机系统设置中开启',
								confirmText: '知道了',
							})
							resolve(false)
						}
					}
				});
				// #endif
				// #ifdef H5 
				resolve({
					longitude: '-',
					latitude: '-',
					address: '定位失败'
				})
				// #endif
			}
		});
	})

}


//打开授权设置（必须用户点击小程序才能打开授权设置，所以前面加了showModel）
export function openSetting() {
	// App跳转系统的设置界面
	// #ifdef APP-PLUS
	uni.getSystemInfo({
		success(res) {
			if (res.platform == 'ios') { //IOS
				plus.runtime.openURL("app-settings://");
			} else if (res.platform == 'android') { //安卓
				console.log('xxxxx')
				var Intent = plus.android.importClass('android.content.Intent');
				var Settings = plus.android.importClass('android.provider.Settings');
				var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
				var main = plus.android.runtimeMainActivity();
				main.startActivity(intent); // 打开系统设置GPS服务页面
			}
		}
	});
	// #endif
}
